package com.loong.web.gp4j.dao.code;

import java.util.Date;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

/**
 * 代码缓存
 *
 * @author 张成轩
 */
@Repository
public class CodeCache {

	@Resource
	private RedisTemplate<String, String> template;
	@Resource
	private Gson gson;
	@Value("${cache.code.expire}")
	private long expire;

	/** 存储键 */
	private static final String KEY = "code:";

	/**
	 * 保存代码集
	 * 
	 * @param type 代码类型
	 * @param codes 代码集
	 */
	public void put(String type, Map<Integer, String> codes) {

		String key = KEY + type;
		template.opsForValue().set(key, gson.toJson(codes));
		template.expireAt(key, new Date(System.currentTimeMillis() + expire));
	}

	/**
	 * 获取代码集
	 * 
	 * @param type 代码类型
	 * @return 代码集
	 */
	public Map<Integer, String> get(String type) {

		String value = template.opsForValue().get(KEY + type);
		if (value == null)
			return null;
		return gson.fromJson(value, new TypeToken<Map<Integer, String>>() {
		}.getType());
	}

	/**
	 * 移除代码集
	 * 
	 * @param type 代码类型
	 */
	public void remove(String type) {

		template.delete(KEY + type);
	}
}
